{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a50b59ef-51d5-4c14-8a8a-55836f3bd1dd",
   "metadata": {},
   "source": [
    "Chapter 18\n",
    "# 邻接矩阵乘法\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "24cdaf05-5567-4b87-b232-ae82a9abff83",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5f2ecd59-f6c8-4a23-bcdb-dc3c73b727b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G = nx.DiGraph()\n",
    "# 创建有向图的实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "4ed86243-583b-4d8e-931c-b3b47ed09203",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_nodes_from(['a', 'b', 'c', 'd'])\n",
    "# 添加多个顶点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "fdde0032-d5ba-4993-8235-97d806cd7e9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_edges_from([('a','b'),('b','a'),\n",
    "                           ('c','b'),('b','c'),\n",
    "                           ('b','d'),('d','c'),\n",
    "                           ('a','c')])\n",
    "# 增加一组有向边"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "4bb4c143-66fd-448a-9edd-feaf035d61e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(directed_G, \n",
    "                 pos = nx.spring_layout(directed_G,seed = 8),\n",
    "                 node_size = 180)\n",
    "plt.savefig('有向图.svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "1a1319c4-8551-402b-842b-7dd3ab432145",
   "metadata": {},
   "outputs": [],
   "source": [
    "A = nx.adjacency_matrix(directed_G).todense()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "d893fa39-4bcc-4803-bbd9-1c9738d22600",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 1, 1, 0],\n",
       "       [1, 0, 1, 1],\n",
       "       [0, 1, 0, 0],\n",
       "       [0, 0, 1, 0]], dtype=int32)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31c21d26-20cc-40eb-99c2-0c712160de9e",
   "metadata": {},
   "source": [
    "## $A^{2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "88aaaea2-c974-4cf8-849b-dfc92e33d55a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1, 1, 1],\n",
       "       [0, 2, 2, 0],\n",
       "       [1, 0, 1, 1],\n",
       "       [0, 1, 0, 0]], dtype=int32)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A @ A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2f44fbc2-bcd4-42c5-aaec-1d9d560a6f16",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "7a4a7565-fec9-4f18-aa45-7b8a820bd2f9",
   "metadata": {},
   "source": [
    "## $A^{n}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "724f9349-1888-4d7f-91f8-12bb6a0cdcc9",
   "metadata": {},
   "outputs": [],
   "source": [
    "A @ A @ A @ A"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "092cc210-91b0-46b0-9499-e2c0a5332a2c",
   "metadata": {},
   "source": [
    "## $AA^{T}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "0f1d17d5-d942-41aa-8adc-be659836a841",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2, 1, 1, 1],\n",
       "       [1, 3, 0, 1],\n",
       "       [1, 0, 1, 0],\n",
       "       [1, 1, 0, 1]], dtype=int32)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A @ A.T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9e99455-7444-4bed-9b65-ae75ab29d464",
   "metadata": {},
   "source": [
    "## $A^{T}A$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "df7a5495-cdac-4731-8ee9-ef9a202215e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 1, 1],\n",
       "       [0, 2, 1, 0],\n",
       "       [1, 1, 3, 1],\n",
       "       [1, 0, 1, 1]], dtype=int32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A.T @ A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "186e4b04-44dc-48ce-86ee-a3ccdc6a6263",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
